// 解题思路：
// 每次找到数组中最大的数，减少一半（贪心策略）
// 操作的次数就是数组和减半的最少次数

import java.util.PriorityQueue;

class Solution {
    public int halveArray(int[] nums) {
        int n = nums.length;
        long sum = 0;
        PriorityQueue<Double> queue = new PriorityQueue<Double>((a, b) -> {
            if(a >= b) return -1;
            else return 1;
        });
        for(int i = 0; i < n; i++){
            sum += nums[i];
            queue.offer((double)nums[i]);
        }
        double t = sum / 2.0;
        double target = 0;
        int count = 0;
        while(target < t){
            double tmp = queue.poll();
            tmp /= 2.0;
            target += tmp;
            count++;
            queue.offer(tmp);
        }
        return count;
    }
}